package com.springboot.file.provider.impl;

import com.springboot.file.provider.DocumentProvider;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;

/**
 * 测试文档处理器实现
 * 用于前端UI测试Word和PDF导出功能
 */
@Component
public class TestDocumentProvider implements DocumentProvider {
    
    private static final String BUSINESS_TYPE = "TEST";
    
    @Override
    public String getBusinessType() {
        return BUSINESS_TYPE;
    }
    
    @Override
    public Map<String, Object> prepareData(Map<String, Object> parameters) {
        Map<String, Object> data = new HashMap<>();
        
        // 添加基础数据
        data.put("title", "测试文档");
        data.put("author", "测试用户");
        data.put("date", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")));
        data.put("content", "这是一个使用DocumentUtil生成的测试Word文档，用于测试模板替换和PDF转换功能。");
        data.put("customerName", "测试客户");
        data.put("customerId", "TEST-001");
        
        // 添加合同数据
        data.put("contractId", "CONTRACT-" + System.currentTimeMillis() % 10000);
        data.put("companyName", "ABC技术有限公司");
        data.put("companyRep", "张三");
        data.put("companyContact", "13800138000");
        data.put("customerRep", "李四");
        data.put("customerContact", "13900139000");
        data.put("serviceContent", "提供系统开发及技术支持服务，包括但不限于软件设计、开发、测试、部署和运维。");
        data.put("startDate", LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE));
        data.put("endDate", LocalDate.now().plusYears(1).format(DateTimeFormatter.ISO_LOCAL_DATE));
        data.put("amount", "¥100,000.00");
        data.put("paymentMethod", "分期付款，首付50%，剩余分两次支付");
        data.put("providerObligations", "1. 按时提供优质的技术服务\n2. 保证系统的稳定运行\n3. 及时响应客户的需求变更");
        data.put("customerObligations", "1. 按时支付服务费用\n2. 提供必要的业务资料\n3. 配合测试与验收");
        data.put("confidentiality", "双方应对获知的对方商业秘密严格保密，未经对方书面同意，不得向第三方透露。");
        data.put("liability", "任何一方违反本合同约定，应向对方支付合同总金额20%的违约金。");
        data.put("otherTerms", "本合同未尽事宜，双方协商解决。");
        
        // 添加客户自定义的参数
        if (parameters != null && !parameters.isEmpty()) {
            parameters.forEach((key, value) -> {
                if (value != null) {
                    data.put(key, value);
                }
            });
        }
        
        return data;
    }
    
    @Override
    public String getTemplateName(Map<String, Object> parameters) {
        // 根据参数选择不同的模板
        if (parameters != null && parameters.containsKey("template")) {
            String template = parameters.get("template").toString();
            if ("contract".equalsIgnoreCase(template)) {
                return "contract_template.docx";
            }
        }
        
        // 默认使用sample模板
        return "sample_template.docx";
    }
    
    @Override
    public String getHeader(Map<String, Object> parameters) {
        return "测试文档 - " + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
    
    @Override
    public String getFooter(Map<String, Object> parameters) {
        return "机密文件 - 仅供测试使用";
    }
    
    @Override
    public String getWatermarkText(Map<String, Object> parameters) {
        String watermarkText = "测试文件";
        
        // 如果参数中有水印文本，则使用参数中的值
        if (parameters != null && parameters.containsKey("watermarkText")) {
            Object value = parameters.get("watermarkText");
            if (value != null && !value.toString().trim().isEmpty()) {
                watermarkText = value.toString();
            }
        }
        
        return watermarkText;
    }
    
    @Override
    public String getWatermarkColor(Map<String, Object> parameters) {
        String watermarkColor = "#CCCCCC"; // 默认浅灰色
        
        // 如果参数中有水印颜色，则使用参数中的值
        if (parameters != null && parameters.containsKey("watermarkColor")) {
            Object value = parameters.get("watermarkColor");
            if (value != null && !value.toString().trim().isEmpty()) {
                watermarkColor = value.toString();
            }
        }
        
        return watermarkColor;
    }
    
    @Override
    public boolean showPageNumbers(Map<String, Object> parameters) {
        boolean showPageNumbers = true; // 默认显示页码
        
        // 如果参数中有页码显示设置，则使用参数中的值
        if (parameters != null && parameters.containsKey("showPageNumbers")) {
            Object value = parameters.get("showPageNumbers");
            if (value != null) {
                if (value instanceof Boolean) {
                    showPageNumbers = (Boolean) value;
                } else if (value instanceof String) {
                    showPageNumbers = Boolean.parseBoolean(value.toString());
                }
            }
        }
        
        return showPageNumbers;
    }
} 